home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Deutsche Edition 1
/
Deutsche Edition 1.iso
/
amok
/
001-010
/
amok06
/
mathlib
/
mathlib.doc
< prev
next >
Wrap
Text File
|
1993-11-04
|
5KB
|
186 lines
----------------------------------------------------------------------
Dokumentation zu MathLibR2 und -R3 Version 1.0
Autor: Nicolas Benezan, Postwiesenstr. 2, D7000 Stuttgart 60
----------------------------------------------------------------------
MathLibR2 und MathLibR3 sind Mathematik-Bibliotheken für den R2
(zweidimensionaler reeller Raum) und R³ (dreidimensionaler reeller
Raum). Die Unterschiede zwischen MathLibR2 und MathLibR3 sind gering.
Falls nicht anderes vermerkt ist, gilt die folgende Dokumentation für
beide Module. Die Prozedur- und Typennamen haben noch zusätzlich eine
2 oder 3 angehängt, sodaß sie ohne Nameskonflikt beliebig aus beiden
Modulen Importieren können. In der Dokumentation sind diese Indizies
weggelassen, wenn beide gemeint sind.
Ich habe versucht, die mathematische Schreibweise der Formeln so gut
es eben geht mit dem Standardzeichensatz zu realisieren:
a steht für einen Skalar (reelle Zahl) Beispiel: 1.0
_ /x\
a für einen (Spalten-) Vektor Beispiel: | y |
\z/
/a11 a12 a13\
A für eine Matrix. Beispiel: | a21 a22 a23 |
\a31 a32 a33/
/1 0 0\
E ist Einheitsmatrix /1 0\ bzw. | 0 1 0 |
\0 1/ \0 0 1/
æ,ß,y sind lineare Abbildungen (soll "alpha", "beta" und "gamma"
darstellen)
a·b oder ab: Multiplikation
_ _
a x b : Kreuzmultiplikation
æ°ß : verknüpfung der Abbildungen æ nach ß
Die strengen Mathematiker mögen mir verzeihen.
Vektoren Addieren und Subtrahieren
----------------------------------
_ _ _ _ _ _
Formel: c=a+b d=a-b
Modula: VAR a,b,c,d:Vector;
...
Add(a,b,c); Sub(a,b,d);
Skalarmultiplikation
--------------------
_ _
Formel: b=a·s oder b=sa
Modula: VAR a,b:Vektor;
s:Scalar;
...
Smul(s,a,b);
Das Skalarprodukt
-----------------
__
Formel: s=ab
Modula: VAR a,b:Vector;
s:Skalar;
...
s:=SkProd(a,b);
Das Vektorkreuzprodukt
----------------------
Diese Prozedur ist nur im dreidimensionalen Raum definiert.
_ _ _
Formel: c=a x b
Modula: VAR a,b,c:Vector;
...
Xprod3(a,b,c);
Im R2 gibt es zwar kein Kreuzprodukt, dafür ist aber auf C (Menge der
komplexen Zahlen, isomorph zu R2, nicht etwa die Konkurrenz zu Modula)
eine Multiplikation definiert, bei der die Multiplikation zweier
komplexer Zahlen wieder eine komplexe Zahl ergibt.
Diese Multiplikation wurde in MathLibR2 als Cprod2 implementiert.
Betrag eines Vektors
--------------------
_
Formel: s=|a|
Modula: VAR a:Vector;
s:Scalar;
...
s:=Abs(a);
lineare Abbildungen
-------------------
Bis auf die Parallelverschiebung (Translation) lassen sich alle
linearen Abbildungen wie zentrische Streckung, Drehung und Scherung
mit einer 2x2-Matrix im zweidimensionalen oder einer 3x3-Matrix im
dreidimensionalen Raum beschreiben. Es gibt die Möglichkeit, auch die
Translation unter Verwendung einer 4x4 Matrix einzubeziehen.
Allerdings rate ich, stattdessen lieber getrennte Matrizenoperation
und Vektoraddition zu verwenden. Eine 4x4-Transformation benötigt
nämlich 16 Multiplikationen und 12 Additionen gegenüber 9
Multiplikationen und 9 Additionen bei der 3x3-Transformation mit
anschließender Vektoraddition, was sich in der Rechenzeit bemerkbar
macht ('mal davon abgesehen, daß ich ehrlich gesagt keine Lust habe,
die äußerst komplexe 4x4-Matrizeninversion zu programmieren).
Die Matrix für eine zentrische Streckung um den Faktor k errechnet
sich aus k·E (E:Einheitsmatrix). Sonderfall: k=1 (Identität)
Eine Drehmatrix für den zweidimensionalen Raum sieht so aus:
/cos w -sin w\
\sin w cos w/
Im dreidimensionalen Raum kann um verschiedene Achsen gedreht werden.
Drehung um die X-Achse:
/1 0 0 \
| 0 cos w sin w |
\0 -sin w cos w/
Drehung um die Y-Achse:
/cos w 0 -sin w\
| 0 1 0 |
\sin w 0 cos w/
Drehung um die Z-Achse:
/cos w sin w 0\
|-sin w cos w 0 |
\ 0 0 1/
Affine Abbildungen, Scherung und Stauchung, werden in der
Computergrafik, für die diese Module gedacht sind, nur selten
verwendet, weshalb ich hier nicht darauf eingehen werde. Wer mehr über
Vektoren, Matrizen und Abbildungen wissen möchte, kann sich mit
entsprechender Literatur behelfen.
Abbildung eines Vektors
_ _ _
Formel: æ(v) bzw. b=Mv
Modula: VAR v,b:Vector;
M:Matrix;
...
Trans(M,v,b);
Umkehrabbildung
---------------
_
Formel: æ (lies: alpha quer) oder M^-1 (lies: M hoch -1)
Modula: VAR M:Matrix;
Erfolg:BOOLEAN;
...
Erfolg:=Invert(M);
gibt es keine Umkehrabbildung ist Erfolg FALSE.
Verkettung von Abbildungen
--------------------------
Formel: y=æ°ß
Modula: VAR A,B,C:Matrix;
...
Mmul(A,B,C);
Falls in einer Prozedur mehrere Parameter gleichen Typs verlangt
werden, ist es erlaubt, die gleiche Variable wiederzuverwenden.
Beispiel:
Trans3(Matrix,Vector,Vector);
Der Vektor wird lokal zwischengespeichert und dann mit dem Ergebnis
überschrieben.
Wer statt FFP lieber mit (LONG)REAL arbeitet, kann die Definition des
Typs Scalar ändern, ohne das ganze Programm durchsuchen zu müssen.
_________________
Viel Spaß !
Bene